JS作用域

什么是作用域?

既然是JS基础类别的,自然就少不了JS作用域的知识。js中的作用域分为全局作用域和局部作用域。js中并没有 像java语言中的块级作用域。

全局作用域

var a = 0;

if (true) {
var b = 1;
}

console.log(b); // 输出1

像这样在全局中定义a变量,为全局变量,在任何地方都能访问到这个a变量。
因为js中没有块级作用域,所以在 if 或是 for 这样逻辑语句中定义的变量都是可以被外界访问到的。

局部作用域

局部作用域也可以称之为函数作用域。

function fn () {
var c = 2;
}

console.log(c); // 报错,c变量未定义

局部作用域中定义的变量,只供局部作用域调用,外界无法访问。

作用域链

关于作用域链,局部作用域可以访问到全局作用域中的变量和方法,而全局作用域不能访问局部作用域的变量和方法。

var a = 0;

function fn () {
var b = 1;
// 变量 a 并没有在 fn 这个局部作用域中定义,所以会沿着作用域链一级一级的搜索。
// 全局作用域定义了 a 变量,就输出 a 的值,没有就报错
console.log(a); // 输出 1
}

// 全局作用域并不能访问 fn 函数中定义的 b 变量
console.log(b); // 报错